
package clases_anidadas.internas_estandard;

/**
 *
 * @author Luis_Angel
 */
 class Externa {
    private String var1="s";

    public void metodoGenerico(){
            System.out.println("metodo generico externo");
    }
    
    class Interna{

        public void metodoGenerico(){
            System.out.println("metodo generico interrno");
        }

        public void metodoInterno1(){

            System.out.println("llamada al metodo interno 1");
            //si metodos del mismo nombre escoge al de la clase interna.
            metodoGenerico();
            //llamada a metodo de la clase externa mediante this.
            Externa.this.metodoGenerico();
        }

        public void metodoInterno2(){
            //acceso inmediato a las variables de la clase externa asi sean privadas
            System.out.println("usando variable de clase externa : " + var1);
        }
    }
  }

 public class EjemploThis{
     public static void main(String[] args){
            Externa ex = new Externa();
            //instancia de la clase interna mediante la instancia de la externa.
            Externa.Interna in = ex.new Interna();
            in.metodoInterno1();
            in.metodoInterno2();
     }
 }
